package com.jt.controller;

import com.jt.pojo.User;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@RestController                 //  @Controller +  @ResponseBody
@RequestMapping("/user")    //定义公共的前缀

public class UserController {

    /**
     *
     * URL:http://localhost:8080/user/findUser?id=100&name=tomcat
     * 规则: SpringMVC中的参数名称，必须与传递参数名称一致
     * 原理:SpringMVC在内部将Servlet的取值的方式包装.用户只需填写参数
     *       即可以获取数据．
     * @param request
     * @param response
     * @return
     */
    @RequestMapping("/findUser")
    public String findUser(HttpServletRequest request, HttpServletResponse response){
        String id = request.getParameter("id");
        int intId = Integer.parseInt(id);
        String name = request.getParameter("name");
        return  intId + ":"+ name;
    }

    /**
     * URL:http://localhost:8080/user/findUser2?id=100&name=tomcat
     *      * 规则: SpringMVC中的参数名称，必须与传递参数名称一致
     *      * 原理:SpringMVC在内部将Servlet的取值的方式包装.用户只需填写参数
     *      *       即可以获取数据．
     *
     * @param id
     * @param name
     * @return
     */
    @RequestMapping("/findUser2")
    public String findUser2(Integer id, String name){

        return  id + ":"+ name;
    }

    /**
     * 返回值：User对象
     * 知识点:
     * 当遇到多个参数时，可以使用对象封装.
     * 要求对象的属性必须与参数名称一致,同时必须有Set/Get方法.
     *      SpringMVC会自动的将参数赋值给对象的属性
     * @return
     */
    @RequestMapping("/getUser")
    public User getUser(User user){
        return user;
    }

    /**
     * RestFul结构  动态接收参数
     * URL：http://localhost:8080/user/restFul/1/张三
     * 返回值:返回User对象
     * 难点:需要从URL的路径中获取参数! !!语法:
     * 1.服务器端参数接收时，变量使用{xx}进行包裹，并且付置固定.
     * 2.利用@PathVariable注解，动态获取路径中的数据，要求名称必须匹配
     */
    @RequestMapping("/restFul/{id}/{name}")
    public User restFul(@PathVariable Integer id,@PathVariable String name){
        User user = new User();
        user.setName(name);
        user.setId(id);
        return user;
    }

    /**
     *
     * RestFul对象接收:
     * 如果对象的属性与H{key}相同，则可以使用对象接收.
     * 用途:restFul结构一般用于更新操作
     */
    @RequestMapping("/restFul2/{id}/{name}/{age}")
    public User restFul2(User user){

        return user;
       }
    /**
     * url地址：http://localhost:8080/user/saveHobby?hobby=大头，大耳朵，大鼻子，大嘴巴子
    * 返回值:参数获取之后返回
     * SpringMVC功能:
    * 如果url中的参数使用,号的方式连接,则可以自动的转化为数组结树
    */
    @GetMapping("/saveHobby")
    public String[] saveHobby(String[] hobby){
        return hobby;
    }
}
